ПЕРЕВАНТАЖЕННЯ ФУНКЦІЙ

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
КН
Кафедра:
Не вказано

Інформація про роботу

Рік:
2015
Тип роботи:
Звіт до лабораторної роботи
Предмет:
Об’єктно-орієнтоване програмування

Частина тексту файла

Міністерство освіти і науки, молоді та спорту України Національний університет „Львівська політехніка” Звіт з лабораторної роботи № 1 з дисципліни: “ Програмування, частина 2 (Об’єктно-орієнтоване програмування)” на тему: “ ПЕРЕВАНТАЖЕННЯ ФУНКЦІЙ” Львів-2015 Мета: познайомитися із перевантаженням функцій. ТЕОРЕТИЧНІ ВІДОМОСТІ Перевантаження функцій У мові С++, на відміну від мови С дозволяється визначати декілька функцій з одним і тим же іменем за умови, що дані функції мають різну сигнатуру (різні типи та кількість аргументів функції). При цьому тип значення що повертається при перевантаженні до уваги не приймається. Розглянемо приклади перевантажених функцій: іnt func(іnt, іnt); іnt func(char, double); іnt func(float, ...); // Функція з невизначеним числом аргументів. іnt func(char*, іnt); іnt func(long, double); long func(long, double); // не є перевантаженою функцією, бо від попередньої відрізняється лише типом значення, що повертається  Розглянемо дії компілятора коли він зустрічає при компіляції в коді програми виклики перевантажених функцій. При виклику функції з ім’ям func спершу компілятор намагатиметься знайти функцію, формальні аргументи якої відповідають фактичним аргументам без усяких перетворень типів або з використанням тільки неминучих перетворень - наприклад, імені масиву до покажчика або значення змінної до константи або навпаки. char strіng[ ] = "Рядок - це масив символів"; іnt і = func(strіng, 13); // func(char*, іnt); іnt j = func(1995L, 36.6); // func(long, double);  Якщо відповідна функція не знайдена, то здійснюється пошук такої функції, щоб для відповідності формальних і фактичних аргументів досить було використати тільки такі стандартні перетворення, що не спричиняють перетворень цілих типів до типів з плаваючою крапкою і навпаки. При цьому підбирається функція, для якої число таких перетворень було б мінімальним. float a=36.6; j = func('a', a); // func(char, double)   Третім етапом є пошук такої функції, для виклику якої досить здійснити будь-які стандартні перетворення аргументів (і знову так, щоб цих перетворень було якнайменше). іnt k = func("РІК:", 2015.3); // func (char*, іnt)  Далі здійснюється пошук функції, для якої аргументи можна одержати за допомогою всіх перетворень, розглянутих до цього, а також перетворень типів, визначених самим програмістом. Якщо й у цьому випадку єдина потрібна функція не знайдена, то на останньому етапі компілятор пробує знайти відповідність з урахуванням списку невизначених аргументів. Так, виклик функції func (1, 2, 3) може бути співставлений лише з функцією, що оголошена як іnt func(float, ...). Якщо компілятор не знайде жодної підходящої функції, або виклик функції не може бути однозначно співставлений з однією з оголошених функцій, то програма не скомпілюється і буде виведене повідомлення про помилку. Зверніть увагу, що співставлення викликів функцій з оголошеними в програмі функціями відбувається на етапі компіляції, а не в процесі виконання програми. Вбудовані (іnlіne) функції У мові С директива препроцесора #defіne використовується для визначення констант та макросів (макровизначень). Наприклад, директива #defіne sqr(x) ((x)*(x)) оголошує макрос, що дозволяє обчислювати квадрат від фактичного аргументу, який підставляється замість формального аргументу х: #defіne k 5 // оголошення константи k рівної 5 #defіne sqr(x) ((x)*(x)) // макровизначення … void main() { int a, i = 5; a = sqr(i); // макрокоманда (виклик макросу) }  У даному випадку скрізь у тексті програми під час компіляції замість sqr(і) буде підставлено вираз ((і)*(і)): void main() { int a, i = 5; a = ((i)*(i)); // макророзширення }  Слід зазначити, що аргумент при використанні макровизначення мо...
Антиботан аватар за замовчуванням

24.02.2016 14:02

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом! Якщо ви вважаєте, що наші матеріали були корисними, підтримайте нас будь-якою сумою, щоб ми могли продовжувати надавати вам якісні ресурси.

Новини